home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 June / EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso / earcd / mods2 / csthmmrf.lha / HammerFist / HammerFist.s < prev    next >
Text File  |  1996-04-18  |  27KB  |  1,485 lines

  1. *************************************************
  2. * HammerFist Musics by Wally Beben (1991).    *
  3. * Adapted by Mr.STYCKX / Nicolas Pomarede    *
  4. *                        *
  5. * Original replay was in $4f130.        *
  6. *                        *
  7. * Ripped : 06/91                *
  8. * Relocated : 11/04/96                *
  9. * EaglePlayer / Delitracker port : 18/04/96    *
  10. *    Volume                    *
  11. *    Balance                    *
  12. *    SubSong                    *
  13. *    EP_Voices                *
  14. *    EP_StructInit (Analyzer)        *    
  15. *************************************************
  16.  
  17.     opt    o+
  18.  
  19.     output    ram:CUST.HammerFist
  20.  
  21.  
  22. HF_TEST        =    0        ; 0 => BUILD COMPLETE CUSTOM MODULE
  23.                     ; 1 => BUILD SMALL CODE FOR TESTING
  24.  
  25.     section HammerCode,code
  26.  
  27.  
  28.     incdir    "Include:"
  29.     include    "misc/DeliPlayer.i"
  30.     include    "misc/EaglePlayer.i"
  31.  
  32.  
  33.     IFEQ    HF_TEST-0            ; COMPLETE VERSION
  34.  
  35.  
  36.     PLAYERHEADER PlayerTagArray
  37.  
  38.     dc.b '$VER: HammerFist Musics (1991) custom player V1.0, '
  39.     dc.b 'ripped and adapted by Mr.STYCKX (04/96)',0
  40.  
  41.     EVEN
  42.  
  43. PlayerTagArray
  44.     dc.l    DTP_CustomPlayer,1        ; CustomPlayer - Tag (important !!!)
  45.     dc.l    DTP_Flags,PLYF_CUSTOM
  46.  
  47.     dc.l    DTP_PlayerVersion,1<<16+0    ; v1.0
  48.     dc.l    EP_PlayerVersion,1
  49.     dc.l    DTP_PlayerName,PName
  50.     dc.l    DTP_Creator,CName
  51.  
  52.     dc.l    DTP_InitPlayer,InitPlay        ; alloc audio
  53.     dc.l    DTP_EndPlayer,EndPlay        ; free audio
  54.     dc.l    DTP_InitSound,HF_init        ; init custom data
  55.     dc.l    DTP_EndSound,HF_end        ; clear DMA
  56.  
  57.     dc.l    DTP_SubSongRange,HF_SubSongRange
  58.  
  59.     dc.l    DTP_Interrupt,HF_Play
  60.  
  61.     dc.l    DTP_Volume,HF_Volume
  62.     dc.l    DTP_Balance,HF_Volume
  63.  
  64.     dc.l    EP_Voices,HF_SetVoices
  65.     dc.l    EP_StructInit,HF_StructInit
  66.  
  67.     dc.l    EP_Flags,EPB_Voices!EPB_Analyzer!EPB_Volume!EPB_Balance
  68.  
  69.     dc.l    TAG_DONE
  70.  
  71.  
  72. PName    dc.b    "HammerFist Custom v1.0",0
  73. CName    dc.b    "Music by Wally Beben (1991).",$a
  74.     dc.b    "Adapted by Mr.STYCKX (18/04/96)",0
  75.  
  76.     EVEN
  77.  
  78.  
  79. HF_StructAnalyzer            ; transmis à EaglePlayer pour gérer
  80.     ds.l    UPS_SizeOF        ; les analyzers
  81.  
  82.  
  83.  
  84. *-----------------------------------------------------------------------*
  85. ;
  86. ; Init Player
  87.  
  88. InitPlay
  89.     move.l    dtg_AudioAlloc(a5),a0        ; Function
  90.     jmp    (a0)
  91.  
  92.  
  93. *-----------------------------------------------------------------------*
  94. ;
  95. ; End Player
  96.  
  97. EndPlay
  98.     move.l    dtg_AudioFree(a5),a0        ; Function
  99.     jmp    (a0)
  100.  
  101.  
  102. *-----------------------------------------------------------------------*
  103. ;
  104. ; Init Custom Replay Routine
  105.  
  106. HF_init
  107.     move.w    dtg_SndNum(a5),d0    ; sub song nbr (1..7)
  108.     bsr    HF_InitSong
  109.  
  110.     rts
  111.  
  112.  
  113. *-----------------------------------------------------------------------*
  114. ;
  115. ; Clear Audio Reg.
  116.  
  117. HF_end
  118.     move.w    #$f,$dff096
  119.     clr.w    $dff0a8
  120.     clr.w    $dff0b8
  121.     clr.w    $dff0c8
  122.     clr.w    $dff0d8
  123.  
  124.     rts
  125.  
  126.  
  127. *-----------------------------------------------------------------------*
  128. ;
  129. ; Interrupt routine called every 1/50 s
  130.  
  131. HF_Play
  132.     bsr    HF_InterVBL
  133.     rts
  134.  
  135.  
  136. *-----------------------------------------------------------------------*
  137. ;
  138. ; Returns min and max sub song
  139.  
  140. HF_SubSongRange
  141.     moveq    #1,d0            ; min
  142.     moveq    #7,d1            ; max
  143.  
  144.     rts
  145.  
  146.  
  147. *-----------------------------------------------------------------------*
  148. ;
  149. ; Set Volume
  150.  
  151. HF_Volume
  152.     move.w    dtg_SndLBal(a5),d0    ; Vol Left
  153.     mulu    dtg_SndVol(a5),d0    ; Vol Max
  154.     lsr.w    #6,d0
  155.     move.w    d0,HF_MasterVolA    ; final Vol Left
  156.     move.w    d0,HF_MasterVolD
  157.  
  158.     move.w    dtg_SndRBal(a5),d0
  159.     mulu    dtg_SndVol(a5),d0
  160.     lsr.w    #6,d0
  161.     move.w    d0,HF_MasterVolB
  162.     move.w    d0,HF_MasterVolC
  163.  
  164.     rts
  165.  
  166.  
  167. *-----------------------------------------------------------------------*
  168. ;
  169. ; Set DMA Voices
  170.  
  171. HF_SetVoices
  172.     move.w    d0,HF_DMA_EP    ; bit=1 <=> voice is ON
  173.  
  174.     rts
  175.  
  176.  
  177. *-----------------------------------------------------------------------*
  178. ;
  179. ; Returns address of the UPS structure to EaglePlayer
  180.  
  181. HF_StructInit
  182.     lea    HF_StructAnalyzer(pc),a0
  183.  
  184.     rts
  185.  
  186.  
  187.  
  188. *-----------------------------------------------------------------------*
  189.  
  190.  
  191.     ELSEIF                ; TESTVERSION
  192.  
  193.  
  194. ;-------
  195. ; Small code to test the player under a debugger
  196.  
  197.  
  198.     bsr    Run
  199.     bra    Stop
  200.  
  201. Run
  202.     moveq    #1,d0
  203.     bsr    HF_InitSong
  204.  
  205.     lea    Jmp+2(PC),A0
  206.     move.l    $6C.W,(A0)
  207.     lea    Vbl(PC),A0
  208.     move.l    A0,$6C
  209.     move.w    #$C020,$DFF09A
  210.     rts
  211.  
  212. Stop
  213.     move.l    Jmp+2(PC),$6C
  214.     moveq    #0,D0
  215.     bsr    HF_InitSong
  216.     rts
  217.  
  218. Vbl
  219.     btst    #5,$dff01f
  220.     beq.s    Jmp
  221.  
  222. .wa    cmp.b    #60,$dff006
  223.     blt.s    .wa
  224.  
  225.     move.w    #$700,$dff180
  226.  
  227.     jsr    HF_InterVBL(PC)
  228.  
  229.     move.w    #$567,$dff180
  230.  
  231. Jmp    jmp    0.l
  232.  
  233.  
  234. HF_StructAnalyzer            ; transmis à EaglePlayer pour gérer
  235.     ds.l    UPS_SizeOF        ; les analyzers
  236.  
  237.  
  238.     ENDC
  239.  
  240.  
  241.  
  242. ;------------------------------------------------------------------------
  243. ; Données pour EaglePlayer / Delitracker
  244.  
  245. HF_DMA_EP    dc.w    %1111        ; voix actives depuis EaglePlayer
  246.  
  247. HF_MasterVolA    dc.w    64        ; 0 .. 64
  248. HF_MasterVolB    dc.w    64
  249. HF_MasterVolC    dc.w    64
  250. HF_MasterVolD    dc.w    64
  251.  
  252. HF_StructA    dc.l    HF_StructAnalyzer
  253. HF_StructB    dc.l    HF_StructAnalyzer+UPS_Modulo
  254. HF_StructC    dc.l    HF_StructAnalyzer+UPS_Modulo*2
  255. HF_StructD    dc.l    HF_StructAnalyzer+UPS_Modulo*3
  256.  
  257. HF_OldPer1    dc.w    -1
  258. HF_OldPer2    dc.w    -1
  259. HF_OldPer3    dc.w    -1
  260. HF_OldPer4    dc.w    -1
  261.  
  262.  
  263. FakeDma        dc.w    0
  264.  
  265. HF_VertPos    dc.w    0
  266.  
  267.  
  268.  
  269. ;-----------------------------------------------------------------------
  270. ; HammerFist Musics
  271. ; Original musics by Wally Beben (located in $4f130) in 1991.
  272. ; Relocated on 11/4/96 by Mr.STYCKX
  273. ;
  274. ; HF_InitSong : D0 = 1..7, choose a subsong
  275. ; HF_InterVBL : called every VBL
  276. ;
  277.  
  278.  
  279. OriginalPatternsAdr    =    $50070
  280. OriginalSamplesAdr    =    $50f1a
  281.  
  282.  
  283.  
  284.  
  285. ;-----------------------------------------------------------------------
  286. ; Reloge les subsongs et init la subsong D0 (1..7)
  287.  
  288. HF_InitSong
  289.     bsr.s    HF_RelocAdr
  290.  
  291.     move.b    d0,HF_SongNbr
  292.     bsr    HF_StopSong
  293.     rts
  294.  
  295.  
  296. ;-----------------------------------------------------------------------
  297. ; Reloge les adresses des patterns et des samples
  298.  
  299. HF_RelocAdr
  300.     movem.l    d0-d1/a0-a1,-(sp)
  301.  
  302.     moveq    #19-1,d0        ; 19 samples
  303.     lea    SamplesAdr(pc),a0
  304.     move.l    #SamplesBuf,d1
  305.     cmp.l    (a0),d1            ; déjà relogé
  306.     beq.s    .done
  307.  
  308.     sub.l    #OriginalSamplesAdr,d1
  309. .RelSamples
  310.     add.l    d1,(a0)+
  311.     dbf    d0,.RelSamples
  312.  
  313.     move.w    #131-1,d0        ; 131 patterns
  314.     lea    PatternsAdr(pc),a0
  315.     move.l    #PatternsBuf,d1
  316.     sub.l    #OriginalPatternsAdr,d1
  317. .RelPatterns
  318.     add.l    d1,(a0)+
  319.     dbf    d0,.RelPatterns
  320.  
  321. .done    movem.l    (sp)+,d0-d1/a0-a1
  322.     rts
  323.  
  324.  
  325. ;-----------------------------------------------------------------------
  326. ; Routine appelée à chaque VBL
  327.  
  328. HF_InterVBL
  329.     movem.l    D0-D7/A0-A6,-(SP)
  330.  
  331.     lea    HF_StructAnalyzer(pc),a0
  332.     move.w    #-1,UPS_Enabled(a0)
  333.     move.w    #UPSB_Adr!UPSB_Len!UPSB_Per!UPSB_Vol!UPSB_DMACon,UPS_Flags(a0)
  334.  
  335.     move.w    HF_DMA_EP(pc),UPS_DMACon(a0)
  336.  
  337.     move.w    UPS_Voice1Per(a0),HF_OldPer1
  338.     move.w    UPS_Voice2Per(a0),HF_OldPer2
  339.     move.w    UPS_Voice3Per(a0),HF_OldPer3
  340.     move.w    UPS_Voice4Per(a0),HF_OldPer4
  341.  
  342.     clr.w    UPS_Voice1Per(a0)
  343.     clr.w    UPS_Voice2Per(a0)
  344.     clr.w    UPS_Voice3Per(a0)
  345.     clr.w    UPS_Voice4Per(a0)
  346.  
  347.     bsr.s    HF_VBL2
  348.  
  349.     ; La replay d'HammerFist remet la période à chaque VBL,ce qui perturbe
  350.     ; les analyzers. On ne transmet donc une période que si elle est
  351.     ; différente de la VBL précédente.
  352.  
  353.     lea    HF_StructAnalyzer(pc),a0
  354.     move.w    UPS_Voice1Per(a0),d0
  355.     cmp.w    HF_OldPer1(pc),d0    ; nouvelle fréquence
  356.     bne.s    .2            ; oui
  357.     clr.w    UPS_Voice1Per(a0)    ; non, on remet a 0
  358.  
  359. .2    move.w    UPS_Voice2Per(a0),d0
  360.     cmp.w    HF_OldPer2(pc),d0
  361.     bne.s    .3
  362.     clr.w    UPS_Voice2Per(a0)
  363.  
  364. .3    move.w    UPS_Voice3Per(a0),d0
  365.     cmp.w    HF_OldPer3(pc),d0
  366.     bne.s    .4
  367.     clr.w    UPS_Voice3Per(a0)
  368.  
  369. .4    move.w    UPS_Voice4Per(a0),d0
  370.     cmp.w    HF_OldPer4(pc),d0
  371.     bne.s    .0
  372.     clr.w    UPS_Voice4Per(a0)
  373. .0
  374.  
  375.     clr.w    UPS_Enabled(a0)
  376.  
  377.     movem.l    (SP)+,D0-D7/A0-A6
  378.     rts
  379.  
  380.  
  381. ;-----------------------------------------------------------------------
  382. ; Routine VBL principale (teste si changement de subsong)
  383.  
  384. HF_VBL2
  385.     moveq    #0,D0
  386.     moveq    #0,D1
  387.     moveq    #0,D2
  388.     moveq    #0,D3
  389.     moveq    #0,D4
  390.     moveq    #0,D5
  391.     moveq    #0,D6
  392.     moveq    #0,D7
  393.     move.b    HF_SongNbr(pc),D0
  394.     bne.s    lbC000142
  395.     move.b    D0,MusicActive        ; OFF
  396.     bsr    HF_StopVol
  397.     bra    EndVBL
  398.  
  399.  
  400. ;----------------------------------------
  401. ; Teste s'il s'agit d'une autre subsong
  402.  
  403. lbC000142
  404.     moveq    #8,D1            ; max subsong
  405.     cmp.b    D0,D1
  406.     bcs    SameSubSong
  407. NewSubSong
  408.     subq.w    #1,D0
  409.     asl.w    #4,D0            ; 4 mots longs par subsong
  410.     lea    SongPatterns(pc),A0
  411.     add.w    D0,A0
  412.     lea    lbL000CD2(pc),A1
  413.     move.l    (A0)+,(A1)+
  414.     move.l    (A0)+,(A1)+
  415.     move.l    (A0)+,(A1)+
  416.     move.l    (A0),(A1)
  417.     moveq    #3,D1
  418.     moveq    #0,D0
  419. .initvoice
  420.     lea    VoicesData(pc),A0
  421.     add.w    D1,A0
  422.     move.b    D0,$14(A0)
  423.     move.b    D0,$18(A0)
  424.     move.b    D0,12(A0)
  425.     bsr.s    lbC0001A2
  426.     dbra    D1,.initvoice
  427.     bsr    HF_StopSong
  428.     move.b    #1,MusicActive        ; ON
  429.     move.b    #15,lbB000C86
  430.     bra    EndVBL
  431.  
  432.  
  433. ;----------------------------------------
  434. ; Initialise une voix en A0
  435.  
  436. lbC0001A2    lea    lbL000CD2(pc),A1
  437.     move.w    D1,D2
  438.     asl.w    #2,D2
  439.     add.w    D2,A1
  440.     move.l    (A1),lbL000CE2
  441. lbC0001B4    lea    lbL000CE2(pc),A1
  442.     move.l    (A1),A1
  443.     moveq    #0,D0
  444.     move.b    12(A0),D0
  445.     addq.b    #1,12(A0)
  446.     add.w    D0,A1
  447.     move.b    (A1),D0
  448.     cmp.b    #$C0,D0
  449.     bls.s    lbC0001F4
  450.     cmp.b    #$FF,D0
  451.     bne.s    lbC0001E2
  452.     clr.b    12(A0)
  453.     bra.s    lbC0001B4
  454.  
  455. lbC0001E2    add.w    #$20,D0
  456.     move.b    D0,$20(A0)
  457.     bra.s    lbC0001B4
  458.  
  459. lbC0001F4    asl.w    #2,D0
  460.     lea    lbL000E7A(pc),A1
  461.     add.w    D0,A1
  462.     lea    lbL000CC2(pc),A2
  463.     move.l    (A1),0(A2,D2.W)
  464.     move.l    (A1),lbL000CE6
  465.     moveq    #0,D0
  466.     rts
  467.  
  468. ;----------------------------------------
  469. ; Continue à jouer la subsong actuelle déjà initialisée
  470.  
  471. SameSubSong
  472.     tst.b    MusicActive
  473.     beq    EndVBL
  474.     move.b    #3,ActualVoice
  475. lbC000224    lea    VoicesData(pc),A0
  476.     moveq    #0,d1
  477.     move.b    ActualVoice(pc),D1
  478.     move.w    D1,D2
  479.     asl.b    #2,D2
  480.     move.w    D2,ActualVoicex4    ; pour adresser des mots longs
  481.     move.w    D1,D2
  482.     asl.b    #1,D2
  483.     move.w    D2,ActualVoicex2    ; pour adresser des mots
  484.     add.w    D1,A0
  485.     move.b    (A0),lbB000C82
  486.     tst.b    lbB000C7D
  487.     bne.s    lbC0002A8
  488.     subq.b    #1,$14(A0)
  489.     tst.b    $70(A0)
  490.     bne.s    lbC00027A
  491.     tst.b    $14(A0)
  492.     beq.s    lbC000270
  493.     bra.s    lbC00027A
  494.  
  495. lbC000270    bset    D1,lbB000C86
  496.     bra.s    lbC000282
  497.  
  498. lbC00027A    tst.b    $14(A0)
  499.     bmi.s    lbC0002BE
  500. lbC000282    tst.b    $2C(A0)
  501.     bne.s    lbC000296
  502.     tst.b    $30(A0)
  503.     bne.s    lbC0002A2
  504.     bra.s    lbC0002BA
  505.  
  506. lbC000296    subq.b    #1,8(A0)
  507. lbC00029A    bsr    lbC000B00
  508.     bra    lbC000776
  509.  
  510. lbC0002A2    addq.b    #1,8(A0)
  511.     bra.s    lbC00029A
  512.  
  513. lbC0002A8    tst.b    $34(A0)
  514.     beq.s    lbC0002BA
  515.     clr.b    $34(A0)
  516.     subq.b    #2,8(A0)
  517.     bra.s    lbC00029A
  518.  
  519. lbC0002BA    bra    lbC0004F6
  520.  
  521. lbC0002BE    cmp.b    #2,$18(A0)
  522.     beq.s    lbC0002D0
  523.     clr.b    $18(A0)
  524.     clr.b    $1C(A0)
  525. lbC0002D0    clr.b    lbB000C81
  526.     clr.b    $24(A0)
  527.     clr.b    $2C(A0)
  528.     clr.b    $30(A0)
  529.     clr.b    $6C(A0)
  530.     lea    lbL000CC2(pc),A1
  531.     add.w    ActualVoicex4(pc),A1
  532.     move.l    (A1),lbL000CE6
  533. lbC0002F8    moveq    #0,D4
  534.     moveq    #0,D0
  535.     move.b    lbB000C81(pc),D4
  536.     addq.b    #1,lbB000C81
  537.     move.l    lbL000CE6(pc),A3
  538.     move.b    (A3)+,D0
  539.     addq.b    #1,D4
  540.     cmp.b    #$FF,D0
  541.     bne.s    lbC000328
  542.     moveq    #0,D0
  543. lbC00031C    bsr    lbC0001A2
  544.     clr.b    lbB000C81
  545.     bra.s    lbC0002F8
  546.  
  547. lbC000328    cmp.b    #$FE,D0
  548.     bne.s    lbC00033C
  549.     clr.b    HF_SongNbr
  550. lbC000336    moveq    #0,D0
  551.     bra    HF_VBL2
  552.  
  553. lbC00033C    cmp.b    #$FC,D0
  554.     bne.s    lbC00034C
  555.     move.b    (A3),HF_SongNbr
  556.     bra.s    lbC000336
  557.  
  558. lbC00034C    cmp.b    #$EF,D0
  559.     bls.s    lbC000362
  560.     and.b    #15,D0
  561.     move.b    D0,lbB000C7C
  562.     move.b    (A3)+,D0
  563.     addq.b    #1,D4
  564. lbC000362    cmp.b    #$E0,D0
  565.     bne.s    lbC000382
  566.     move.b    (A3)+,D0
  567.     asl.b    #3,D0
  568.     move.b    D0,$4C(A0)
  569.     move.b    (A3)+,D0
  570.     addq.b    #2,D4
  571.     cmp.b    #$FF,D0
  572.     bne.s    lbC000382
  573.     moveq    #0,D0
  574.     bra.s    lbC00031C
  575.  
  576. lbC000382    cmp.b    #$BF,D0
  577.     bls.s    lbC0003A6
  578.     and.b    #$1F,D0
  579.     asl.b    #3,D0
  580.     move.b    D0,$50(A0)
  581.     move.b    (A3)+,D0
  582.     addq.b    #1,D4
  583.     cmp.b    #$FF,D0
  584.     bne.s    lbC0003A6
  585.     moveq    #0,D0
  586.     bra.s    lbC00031C
  587.  
  588. lbC0003A6    cmp.b    #$7F,D0
  589.     bls.s    lbC0003BA
  590.     and.b    #$3F,D0
  591.     move.b    D0,$10(A0)
  592.     move.b    (A3)+,D0
  593.     addq.b    #1,D4
  594. lbC0003BA    cmp.b    #$5F,D0
  595.     bls.s    lbC0003DE
  596.     cmp.b    #$7F,D0
  597.     bne.s    lbC0003E2
  598.     move.b    #1,$2C(A0)
  599.     clr.b    $30(A0)
  600. lbC0003D4    move.b    #1,$18(A0)
  601. lbC0003DA    move.b    (A3)+,D0
  602.     addq.b    #1,D4
  603. lbC0003DE    bra.s    lbC00045C
  604.  
  605. lbC0003E2    cmp.b    #$7E,D0
  606.     bne.s    lbC0003F6
  607.     move.b    #1,$30(A0)
  608.     clr.b    $2C(A0)
  609.     bra.s    lbC0003D4
  610.  
  611. lbC0003F6    cmp.b    #$7D,D0
  612.     bne.s    lbC00041A
  613.     move.b    #1,D0
  614. lbC000402    move.b    D0,$18(A0)
  615.     move.b    (A3)+,D0
  616.     addq.b    #1,D4
  617.     move.b    D0,$1C(A0)
  618.     move.b    D0,lbB000C80
  619.     bsr    lbC0008E8
  620.     bra.s    lbC0003DA
  621.  
  622. lbC00041A    cmp.b    #$7C,D0
  623.     bne.s    lbC000428
  624.     moveq    #2,D0
  625.     bra.s    lbC000402
  626.  
  627. lbC000428    cmp.b    #$7B,D0
  628.     bne.s    lbC00044C
  629.     clr.b    $1C(A0)
  630.     move.b    #1,$18(A0)
  631.     move.b    (A3)+,D0
  632.     add.b    $20(A0),D0
  633.     move.b    D0,$24(A0)
  634.     move.b    (A3)+,$28(A0)
  635.     addq.b    #2,D4
  636.     bra.s    lbC0003DA
  637.  
  638. lbC00044C    cmp.b    #$7A,D0
  639.     bne.s    lbC00045C
  640.     move.b    (A3)+,$44(A0)
  641.     move.b    (A3),D0
  642.     addq.b    #2,D4
  643. lbC00045C    bclr    D1,lbB000C86
  644.     moveq    #0,d5
  645.     move.b    $64(A0),D5
  646.     move.w    D5,$DFF096        ; stoppe la voix audio en cours
  647.     move.b    D4,lbB000C81
  648.     movem.l    D0-D7/A0-A6,-(SP)
  649.     bsr    lbC000A52
  650.     bsr    lbC0009EC
  651.     movem.l    (SP)+,D0-D7/A0-A6
  652.     add.b    $20(A0),D0
  653.     move.b    D0,8(A0)
  654.     beq.s    lbC0004BC
  655.     tst.b    $1C(A0)
  656.     bne.s    lbC0004BC
  657.     moveq    #0,d4
  658.     move.b    $50(A0),D4
  659.     lea    lbL001016(pc),A1
  660.     add.w    D4,A1
  661.     tst.b    $34(A0)
  662.     beq.s    lbC0004BC
  663.     addq.b    #2,8(A0)
  664. lbC0004BC    bsr    lbC000B00
  665.     lea    lbL000CC2(pc),A1
  666.     add.w    ActualVoicex4(pc),A1
  667.     moveq    #0,d0
  668.     move.b    lbB000C81,D0
  669.     add.l    D0,(A1)
  670.     moveq    #0,D0
  671.     move.b    $10(A0),$14(A0)
  672.     move.b    $44(A0),$48(A0)
  673.     move.b    4(A0),$38(A0)
  674.     addq.b    #1,$38(A0)
  675. lbC0004F2    bra    lbC000776
  676.  
  677. lbC0004F6    tst.b    8(A0)
  678.     beq.s    lbC0004F2
  679.     tst.b    $18(A0)
  680.     bne.s    lbC000512
  681.     tst.b    $68(A0)
  682.     bne.s    lbC00053C
  683.     move.b    $4E(A0),$80(A0)
  684. lbC000512    bra    lbC00065E
  685.  
  686.  
  687. lbC00053C    movem.l    D0-D7/A0-A6,-(SP)
  688.     move.b    $68(A0),D0
  689.     move.b    D0,lbB000C7F
  690.     and.b    #15,lbB000C7F
  691.     lsr.b    #4,D0
  692.     move.b    D0,lbB000C7E
  693.     moveq    #0,d0
  694.     move.b    8(A0),D0
  695.     asl.b    #1,D0
  696.     lea    PerTable(pc),A1
  697.     add.l    D0,A1
  698.     move.w    (A1)+,D0
  699.     sub.w    (A1),D0
  700.     move.w    D0,lbW000CEA
  701. lbC000578    subq.b    #1,lbB000C7F
  702.     bmi.s    lbC000598
  703.     lsr.w    lbW000CEA
  704.     or.w    #1,lbW000CEA
  705.     bra.s    lbC000578
  706.  
  707. lbC000598    tst.b    $3C(A0)
  708.     bpl.s    lbC0005B4
  709.     subq.b    #1,$40(A0)
  710.     tst.b    $40(A0)
  711.     bne.s    lbC0005D0
  712.     addq.b    #1,$3C(A0)
  713.     bpl.s    lbC0005D0
  714. lbC0005B4    addq.b    #1,$40(A0)
  715.     moveq    #0,d0
  716.     move.b    $40(A0),D0
  717.     cmp.b    lbB000C7E(pc),D0
  718.     bls.s    lbC0005D0
  719.     subq.b    #1,$3C(A0)
  720. lbC0005D0    tst.b    $48(A0)
  721.     beq.s    lbC0005E0
  722.     subq.b    #1,$48(A0)
  723.     bra.s    lbC000656
  724.  
  725. lbC0005E0    lea    lbL000C88(pc),A1
  726.     add.w    ActualVoicex2(pc),A1
  727.     move.w    (A1),lbW000CEE
  728.     moveq    #0,d0
  729.     move.b    lbB000C7E(pc),D0
  730.     lsr.b    #1,D0
  731.     move.b    D0,D4
  732. lbC000602    subq.b    #1,D4
  733.     bmi.s    lbC00061C
  734.     move.w    lbW000CEE(pc),D0
  735.     add.w    lbW000CEA(pc),D0
  736.     move.w    D0,lbW000CEE
  737.     bra.s    lbC000602
  738.  
  739. lbC00061C    move.b    $40(A0),D4
  740. lbC000626    subq.b    #1,D4
  741.     bmi.s    lbC000642
  742.     move.w    lbW000CEE(pc),D0
  743.     sub.w    lbW000CEA(pc),D0
  744.     move.w    D0,lbW000CEE
  745.     bra.s    lbC000626
  746.  
  747. lbC000642    move.w    lbW000CEE(pc),D0
  748.     lea    VoicesPer(pc),A1
  749.     add.w    ActualVoicex2(pc),A1
  750.     move.w    D0,(A1)
  751. lbC000656    movem.l    (SP)+,D0-D7/A0-A6
  752.     bra    lbC000776
  753.  
  754. lbC00065E    tst.b    $1C(A0)
  755.     beq.s    lbC0006BE
  756.     movem.l    D0-D7/A0-A6,-(SP)
  757. lbC00066A
  758.     moveq    #0,d4
  759.     move.b    $38(A0),D4
  760.     lea    lbL000CFA(pc),A1
  761.     add.w    D4,A1
  762.     moveq    #0,d0
  763.     move.b    (A1),D0
  764.     cmp.b    #$FF,D0
  765.     bne.s    lbC000694
  766.     move.b    4(A0),$38(A0)
  767.     bra.s    lbC00066A
  768.  
  769. lbC000694    add.b    8(A0),D0
  770.     lea    PerTable(pc),A1
  771.     asl.b    #1,D0
  772.     add.w    D0,A1
  773.     move.w    (A1),D0
  774.     lea    VoicesPer(pc),A1
  775.     add.w    ActualVoicex2(pc),A1
  776.     move.w    D0,(A1)
  777.     addq.b    #1,$38(A0)
  778.     movem.l    (SP)+,D0-D7/A0-A6
  779.     bra    lbC000776
  780.  
  781. lbC0006BE    tst.b    $24(A0)
  782.     beq    lbC000776
  783.     move.b    $24(A0),lbB000949
  784.     move.b    $28(A0),D0
  785.     and.b    #15,D0
  786.     move.b    D0,lbB0006F7
  787.     move.b    D0,lbB0009D3
  788.     move.b    $28(A0),D0
  789.     lsr.b    #4,D0
  790.     add.b    $14(A0),D0
  791.     cmp.b    $10(A0),D0
  792.     bgt.s    lbC00076A
  793.     add.b    lbB0006F7(pc),D0
  794.     cmp.b    $10(A0),D0
  795.     bls.s    lbC000750
  796.     move.b    8(A0),D5
  797.     movem.l    D0-D7/A0-A6,-(SP)
  798.     bsr    lbC000946
  799.     movem.l    (SP)+,D0-D7/A0-A6
  800.     lea    lbL000C88(pc),A1
  801.     add.w    ActualVoicex2(pc),A1
  802.     move.w    (A1),D0
  803.     lea    lbL000C98(pc),A2
  804.     tst.b    lbB000C84
  805.     beq.s    lbC000736
  806.     sub.w    (A2),D0
  807.     move.w    D0,(A1)
  808.     bra.s    lbC00073A
  809.  
  810.  
  811.  
  812.  
  813. lbC000736    add.w    (A2),D0
  814.     move.w    D0,(A1)
  815. lbC00073A    lea    VoicesPer(pc),A2
  816.     add.w    ActualVoicex2(pc),A2
  817.     move.w    (A1),(A2)
  818.     bra.s    lbC00076A
  819.  
  820.  
  821. lbC000750    lea    lbL000C88(pc),A1
  822.     add.w    ActualVoicex2(pc),A1
  823.     lea    lbL000C90(pc),A6
  824.     add.w    ActualVoicex2(pc),A6
  825.     move.w    (A6),(A1)
  826. lbC00076A    tst.b    $80(A0)
  827.     beq.s    lbC000776
  828.     bra    lbC00053C
  829.  
  830. lbC000776    moveq    #0,D4
  831.     moveq    #0,D5
  832.     moveq    #0,D6
  833.     tst.b    $14(A0)
  834.     beq.s    lbC000804
  835.     tst.b    $6C(A0)
  836.     bne.s    lbC0007D6
  837.     move.b    $14(A0),D6
  838.     tst.b    $70(A0)
  839.     bne.s    lbC0007A2
  840.     move.b    #1,$6C(A0)
  841.     bra.s    lbC000804
  842.  
  843. lbC0007A2    move.b    $70(A0),D4
  844.     cmp.b    #$FF,D4
  845.     beq.s    lbC000804
  846.     move.b    $10(A0),D5
  847.     divu    D4,D5
  848.     sub.b    D5,D6
  849.     tst.b    D6
  850.     beq.s    lbC0007D6
  851.     move.b    $60(A0),D0
  852.     move.b    $54(A0),D4
  853.     cmp.b    D0,D4
  854.     beq.s    lbC000804
  855.     add.b    $58(A0),D0
  856.     move.b    D0,$60(A0)
  857.     bra.s    lbC000804
  858.  
  859. lbC0007D6    move.b    #1,$6C(A0)
  860.     moveq    #0,D0
  861.     move.b    $60(A0),D0
  862.     move.b    $5C(A0),D4
  863.     sub.b    D4,D0
  864.     tst.b    D0
  865.     beq.s    lbC0007FA
  866.     bmi.s    lbC0007FA
  867.     move.b    D0,$60(A0)
  868.     bra.s    lbC000804
  869.  
  870. lbC0007FA    clr.b    $60(A0)
  871.     bset    D1,lbB000C86
  872. lbC000804    subq.b    #1,ActualVoice
  873.     bmi.s    lbC000812
  874.     bra    lbC000224
  875.  
  876.  
  877. ;----------------------------------------
  878. ;
  879.  
  880. lbC000812
  881.     bsr    SetDMAPerVol
  882.     moveq    #0,D0
  883.     moveq    #3,D1
  884.     moveq    #12,D2
  885.     moveq    #6,D3
  886.     moveq    #$30,D4
  887.     moveq    #0,D5
  888.     moveq    #0,D7
  889.  
  890.     move.b    HF_VertPos(pc),d0
  891. .wa    cmp.b    $dff006,d0        ; on doit attendre un nombre de lignes
  892.     bgt.s    .wa            ; minimal avant d'installer le Repeat
  893.  
  894.     lea    HF_StructAnalyzer+UPS_Modulo*3(pc),a3
  895.  
  896. .dovoice
  897.     moveq    #0,D6
  898.     lea    RepeatLens(pc),A6
  899.     move.w    0(A6,D3.W),D0
  900.     lsr.w    #1,D0
  901.     lea    $DFF0A4,A5
  902.     move.w    D0,0(A5,D4.W)
  903.     moveq    #0,D0
  904.     lea    VoicesRepeat(pc),A6
  905.     move.b    0(A6,D1.W),D0
  906.     bne.s    .repeat_on
  907.  
  908. ;;    lea    RepeatStarts(pc),A6
  909. ;;    move.w    0(A6,D3.W),D6
  910. ;;    lea    lbL000D6E(pc),A6            ; ***
  911. ;;    add.l    0(A6,D2.W),D6
  912.  
  913.     move.l    #EmptySample,d6
  914.     move.w    #1,UPS_Voice1Repeat(a3)    ; repeat OFF
  915.  
  916.     bra.s    .lbC000882
  917.  
  918. .repeat_on
  919.     lea    RepeatStarts(pc),A6
  920.     move.w    0(A6,D3.W),D6
  921.     lea    CurrentSamples(pc),A6
  922.     add.l    0(A6,D2.W),D6
  923.     clr.w    UPS_Voice1Repeat(a3)    ; repeat ON
  924. .lbC000882
  925.     lea    $DFF0A0,A5
  926.     move.l    D6,0(A5,D4.W)
  927.     subq.w    #4,D2
  928.     subq.w    #2,D3
  929.     sub.w    #$10,D4
  930.     lea    -UPS_Modulo(a3),a3
  931.     dbra    D1,.dovoice
  932.  
  933.     subq.b    #1,lbB000C7D
  934.     bpl.s    EndVBL
  935.     move.b    lbB000C7C(pc),lbB000C7D
  936.  
  937. EndVBL    move.b    #$FF,HF_SongNbr        ; subsong traitée
  938.     rts
  939.  
  940.  
  941. ;----------------------------------------
  942. ; Met le volume à 0
  943.  
  944. HF_StopVol
  945.     moveq    #0,D0
  946.     move.l    #$DFF0A8,A5
  947.     move.w    D0,(A5)
  948.     move.w    D0,$10(A5)
  949.     move.w    D0,$20(A5)
  950.     move.w    D0,$30(A5)
  951.     clr.w    HF_StructAnalyzer+UPS_Voice1Vol
  952.     clr.w    HF_StructAnalyzer+UPS_Voice2Vol
  953.     clr.w    HF_StructAnalyzer+UPS_Voice3Vol
  954.     clr.w    HF_StructAnalyzer+UPS_Voice4Vol
  955.     lea    VoicesVol(pc),A5
  956.     move.l    D0,(A5)
  957.     rts
  958.  
  959.  
  960. ;----------------------------------------
  961. ; Coupe le volume et stoppe la replay
  962.  
  963. HF_StopSong
  964.     bsr.s    HF_StopVol
  965.     move.b    D0,lbB000C7D
  966.     move.b    D0,MusicActive        ; replay OFF
  967.     rts
  968.  
  969.  
  970. ;----------------------------------------
  971. ;
  972.  
  973. lbC0008E8    movem.l    D0-D7/A0-A6,-(SP)
  974.     moveq    #0,D4
  975.     move.b    4(A0),D4
  976.     addq.b    #1,D4
  977.     moveq    #0,D5
  978. lbC0008F6    moveq    #0,D0
  979.     move.b    lbB000C80(pc),D0
  980.     btst    #0,D0
  981.     beq.s    lbC000920
  982.     lea    lbL000E02(pc),A1
  983.     add.w    D5,A1
  984.     move.b    (A1),D0
  985.     lea    lbL000CFA(pc),A1
  986.     add.w    D4,A1
  987.     move.b    D0,(A1)
  988.     addq.w    #1,D4
  989.     move.b    lbB000C80(pc),D0
  990. lbC000920    lsr.b    #1,D0
  991.     move.b    D0,lbB000C80
  992.     addq.w    #1,D5
  993.     cmp.b    #8,D5
  994.     bne.s    lbC0008F6
  995.  
  996.     lea    lbL000CFA(pc),A1
  997.     add.w    D4,A1
  998.     move.b    #$FF,(A1)
  999.     clr.b    $24(A0)
  1000.     movem.l    (SP)+,D0-D7/A0-A6
  1001.     rts
  1002.  
  1003.  
  1004.  
  1005. lbC000946
  1006.     move.b    lbB000949(pc),D4
  1007.     cmp.b    D4,D5
  1008.     bcc.s    lbC00098E
  1009.     move.b    #1,lbB000C84
  1010.     lea    PerTable(pc),A1
  1011.     asl.b    #1,D4
  1012.     add.w    D4,A1
  1013.     move.w    (A1),D4
  1014.     move.l    A6,-(SP)
  1015.     lea    lbL000C90(pc),A6
  1016.     add.w    ActualVoicex2(pc),A6
  1017.     move.w    D4,(A6)
  1018.     move.l    (SP)+,A6
  1019.     asl.b    #1,D5
  1020.     lea    PerTable(pc),A1
  1021.     add.w    D5,A1
  1022.     move.w    (A1),D5
  1023.     sub.w    D4,D5
  1024.     move.w    D5,lbL000C98
  1025.     bra.s    lbC0009C6
  1026.  
  1027. lbC00098E    clr.b    lbB000C84
  1028.     lea    PerTable(pc),A1
  1029.     asl.b    #1,D4
  1030.     add.w    D4,A1
  1031.     move.w    (A1),D4
  1032.     move.l    A6,-(SP)
  1033.     lea    lbL000C90(pc),A6
  1034.     add.w    ActualVoicex2(pc),A6
  1035.     move.w    D4,(A6)
  1036.     move.l    (SP)+,A6
  1037.     asl.b    #1,D5
  1038.     lea    PerTable(pc),A1
  1039.     add.w    D5,A1
  1040.     move.w    (A1),D5
  1041.     sub.w    D5,D4
  1042.     move.w    D4,lbL000C98
  1043. lbC0009C6    moveq    #0,D4
  1044.     move.b    lbB000C7C(pc),D4
  1045.     moveq    #0,D0
  1046. lbC0009D0
  1047.     add.b    lbB0009D3(pc),D0
  1048.     dbra    D4,lbC0009D0
  1049.     moveq    #0,D4
  1050.     moveq    #0,D5
  1051.     move.w    lbL000C98(pc),D5
  1052.     divu    D0,D5
  1053.     move.w    D5,lbL000C98
  1054.     rts
  1055.  
  1056.  
  1057. lbC0009EC    moveq    #0,D0
  1058.     move.b    $50(A0),D0
  1059.     lea    lbL001016(pc),A2
  1060.     add.w    D0,A2
  1061.     move.b    (A2),$60(A0)
  1062.     move.b    1(A2),$54(A0)
  1063.     move.b    2(A2),$58(A0)
  1064.     move.b    3(A2),$5C(A0)
  1065.     move.b    4(A2),$70(A0)
  1066.     move.b    5(A2),$68(A0)
  1067.     tst.b    6(A2)
  1068.     beq.s    lbC000A3A
  1069.     move.b    6(A2),$1C(A0)
  1070.     move.b    #$7C,$18(A0)
  1071.     move.b    6(A2),lbB000C80
  1072.     bsr    lbC0008E8
  1073. lbC000A3A    tst.b    7(A2)
  1074.     beq.s    lbC000A50
  1075.     move.b    7(A2),D0
  1076.     btst    #3,D0
  1077.     beq.s    lbC000A50
  1078.     move.b    #1,$27(A0)
  1079. lbC000A50    rts
  1080.  
  1081.  
  1082. ;----------------------------------------
  1083. ; Initialise AudioStart et AudioLen
  1084.  
  1085. lbC000A52    moveq    #0,D0
  1086.     move.b    $4C(A0),D0
  1087.     lea    SamplesInfos(pc),A1
  1088.     add.w    D0,A1
  1089.     move.b    (A1),D4
  1090.     move.b    1(A1),$78(A0)        ; repeat ON/OFF
  1091.     bne.s    lbC000A76
  1092.     move.w    2(A1),D0
  1093.     bra.s    lbC000A7E
  1094.  
  1095. lbC000A76    move.w    4(A1),D0
  1096.     add.w    6(A1),D0
  1097. lbC000A7E    lea    RepeatLens(pc),A6
  1098.     add.w    ActualVoicex2(pc),A6
  1099.     move.w    6(A1),(A6)
  1100.     lea    RepeatStarts(pc),A6
  1101.     add.w    ActualVoicex2(pc),A6
  1102.     move.w    4(A1),(A6)
  1103.     lea    $DFF0A4,A5
  1104.     moveq    #0,d6
  1105.     move.b    lbB000C82(pc),D6
  1106.     lsr.w    #1,D0
  1107.     move.w    D0,0(A5,D6.W)
  1108.     lea    HF_StructA(pc),a5
  1109.     add.w    ActualVoicex4(pc),A5
  1110.     move.l    (a5),a5
  1111.     move.w    d0,UPS_Voice1Len(a5)
  1112.  
  1113.     btst    #1,$78(A0)        ; toujours à 0
  1114.     beq.s    lbC000ADA
  1115.  
  1116.     ;; jamais pris
  1117.     moveq    #0,D0
  1118.     move.w    4(A1),D0
  1119.     lea    SamplesAdr(pc),A1
  1120.     asl.l    #2,D4
  1121.     add.l    D4,(A1)
  1122.     add.l    D0,(A1)
  1123.     move.l    (A1),(A5,D6.W)
  1124.     bra.s    lbC000AEE
  1125.  
  1126. lbC000ADA
  1127.     lea    SamplesAdr(pc),A1
  1128.     asl.l    #2,D4
  1129.     lea    $DFF0A0,A5
  1130.     move.l    0(A1,D4.W),0(A5,D6.W)
  1131.     lea    HF_StructA(pc),a5
  1132.     add.w    ActualVoicex4(pc),A5
  1133.     move.l    (a5),a5
  1134.     move.l    (a1,d4.w),UPS_Voice1Adr(a5)
  1135.  
  1136. lbC000AEE    lea    CurrentSamples(pc),A5
  1137.     add.w    ActualVoicex4(pc),A5
  1138.     move.l    0(A1,D4.W),(A5)
  1139.  
  1140.     move.b    $dff006,d0
  1141.     addq.b    #8,d0            ; attend un min de 8 lignes rasters
  1142.     move.b    d0,HF_VertPos
  1143.  
  1144.     rts
  1145.  
  1146.  
  1147. lbC000B00    move.b    8(A0),D0
  1148.     add.b    D0,D0
  1149.     lea    PerTable(pc),A1
  1150.     move.w    0(A1,D0.W),D0
  1151.     lea    lbL000C88(pc),A1
  1152.     add.w    ActualVoicex2(pc),A1
  1153.     move.w    D0,(A1)
  1154.     lea    VoicesPer(pc),A1
  1155.     add.w    ActualVoicex2(pc),A1
  1156.     move.w    D0,(A1)
  1157.     rts
  1158.  
  1159.  
  1160. ;----------------------------------------
  1161. ; Met à jour DMA, Per et Vol
  1162.  
  1163. SetDMAPerVol
  1164.     movem.l    d0-d1/a0-a3,-(sp)
  1165.  
  1166.     lea    HF_StructAnalyzer(pc),a3
  1167.     lea    VoicesPer(pc),A0
  1168.     lea    $DFF0A6,A2
  1169.     move.w    (A0),(A2)
  1170.     move.w    (a0)+,UPS_Voice1Per(a3)
  1171.     move.w    (A0),$10(A2)
  1172.     move.w    (a0)+,UPS_Voice2Per(a3)
  1173.     move.w    (A0),$20(A2)
  1174.     move.w    (a0)+,UPS_Voice3Per(a3)
  1175.     move.w    (A0),$30(A2)
  1176.     move.w    (a0),UPS_Voice4Per(a3)
  1177.  
  1178.     move.b    lbB000C86(pc),D1
  1179.     not.b    D1
  1180.     and.w    #15,D1
  1181.     and.w    HF_DMA_EP(pc),d1    ; garde les voix ON depuis EP
  1182.      move.w    d1,UPS_DMACon(a3)
  1183.     or.w    #$8200,D1
  1184.     move.w    D1,$DFF096        ; voix ON
  1185.     eor.w    #$820F,D1
  1186.     move.w    D1,$DFF096        ; voix OFF
  1187.  
  1188.     lea    VoicesVol(pc),A1
  1189.     moveq    #0,D0
  1190.     move.b    (A1)+,D0
  1191.     move.w    d0,UPS_Voice1Vol(A3)
  1192.     mulu    HF_MasterVolA(pc),d0
  1193.     lsr.w    #6,d0
  1194.     move.w    D0,2(A2)
  1195.     move.b    (A1)+,D0
  1196.     move.w    d0,UPS_Voice2Vol(A3)
  1197.     mulu    HF_MasterVolB(pc),d0
  1198.     lsr.w    #6,d0
  1199.     move.w    D0,$12(A2)
  1200.     move.b    (A1)+,D0
  1201.     move.w    d0,UPS_Voice3Vol(A3)
  1202.     mulu    HF_MasterVolC(pc),d0
  1203.     lsr.w    #6,d0
  1204.     move.w    D0,$22(A2)
  1205.     move.b    (A1),D0
  1206.     move.w    d0,UPS_Voice4Vol(A3)
  1207.     mulu    HF_MasterVolD(pc),d0
  1208.     lsr.w    #6,d0
  1209.     move.w    D0,$32(A2)
  1210.  
  1211.     movem.l    (sp)+,d0-d1/a0-a3
  1212.     rts
  1213.  
  1214.  
  1215.  
  1216. ;-----------------------------------------------------------------------
  1217. ; Données
  1218.  
  1219.  
  1220. HF_SongNbr
  1221.     dc.b    0            ; subsong choisie
  1222.  
  1223.  
  1224. lbB0006F7    dc.b    0        ; remplace du code auto-modifié
  1225. lbB000949    dc.b    0
  1226. lbB0009D3    dc.b    0
  1227.  
  1228.     EVEN
  1229.  
  1230.  
  1231. PerTable
  1232.     dc.w    $0000,$0650
  1233.     dc.w    $05F4,$05A0
  1234.     dc.w    $054C,$0500
  1235.     dc.w    $04B8,$0474
  1236.     dc.w    $0434,$03F8
  1237.     dc.w    $03C0,$0388
  1238.     dc.w    $0358,$0328
  1239.     dc.w    $02FA,$02D0
  1240.     dc.w    $02A6,$0280
  1241.     dc.w    $025C,$023A
  1242.     dc.w    $021A,$01FC
  1243.     dc.w    $01E0,$01C5
  1244.     dc.w    $01AC,$0194
  1245.     dc.w    $017D,$0168
  1246.     dc.w    $0153,$0140
  1247.     dc.w    $012E,$011D
  1248.     dc.w    $010D,$00FE
  1249.     dc.w    $00F0,$00E2
  1250.     dc.w    $00D6,$00CA
  1251.     dc.w    $00BE,$00B4
  1252.     dc.w    $00A9,$00A0
  1253.     dc.w    $0097,$008E
  1254.     dc.w    $0087,$007F
  1255.     dc.w    $0078,$0071
  1256.  
  1257. VoicesPer
  1258.     dc.w    $02A6,$00FE,$00FE,$00FE
  1259.  
  1260. VoicesData
  1261.     dc.l    $102030
  1262.     dc.l    $A141E
  1263.     dc.l    $10212121
  1264.     dc.l    $3030303
  1265.     dc.l    $13001F03
  1266.     dc.l    $13001303
  1267.     dc.l    0
  1268.     dc.l    0
  1269.     dc.l    0
  1270.     dc.l    0
  1271.     dc.l    0
  1272.     dc.l    0
  1273.     dc.l    0
  1274.     dc.l    0
  1275.     dc.l    $10B151F
  1276.     dc.l    0
  1277.     dc.l    0
  1278.     dc.l    0
  1279.     dc.l    0
  1280.     dc.l    $50204018
  1281.     dc.l    $8080808
  1282.     dc.l    $40404040
  1283.     dc.l    0
  1284.     dc.l    0
  1285. VoicesVol    dc.b    0,0,0,0        ; lbL000C56
  1286.     dc.b    1,2,4,8            ; $64(a0) : pour stopper une voix audio
  1287.     dc.l    0
  1288.     dc.l    0
  1289.     dc.l    $4040404
  1290.     dc.l    0
  1291. VoicesRepeat    dc.b    0,0,1,0
  1292.     dc.l    0
  1293.     dc.l    $40180808
  1294.  
  1295. ActualVoice
  1296.     dc.b    0            ; 0..3, voix en cours de traitement
  1297.  
  1298. MusicActive
  1299.     dc.b    0            ; 0=OFF, 1=ON
  1300.  
  1301. lbB000C7C    dc.b    5
  1302. lbB000C7D    dc.b    0
  1303. lbB000C7E    dc.b    0
  1304. lbB000C7F    dc.b    0
  1305. lbB000C80    dc.b    0
  1306. lbB000C81    dc.b    2
  1307. lbB000C82    dc.b    0
  1308.     dc.b    0
  1309. lbB000C84    dc.b    0
  1310.     dc.b    0
  1311. lbB000C86    dc.b    0        ; DMA OFF
  1312.     dc.b    0
  1313. lbL000C88
  1314.     dc.w    $02A6,$00FE,$00FE,$00FE
  1315. lbL000C90    dc.l    0
  1316.     dc.l    0
  1317. lbL000C98    dc.l    0
  1318.     dc.l    0
  1319.     dc.w    0
  1320.  
  1321.  
  1322. CurrentSamples                ; $4fccc
  1323.     dc.l    0,0,0,0
  1324.  
  1325. RepeatLens                ; $4fcdc
  1326.     dc.w    $0002,$0002
  1327.     dc.w    $0A62,$0002
  1328. RepeatStarts
  1329.     dc.w    $0000,$0000
  1330.     dc.w    $05BA,$0000
  1331.  
  1332. lbL000CC2                ; $4fcec
  1333.     dc.l    0,0,0,0
  1334. lbL000CD2                ; $4fcfc
  1335.     dc.l    0,0,0,0
  1336. lbL000CE2                ; $4fd0c
  1337.     dc.l    0
  1338. lbL000CE6                ; $4fd10
  1339.     dc.l    0
  1340.  
  1341.  
  1342. lbW000CEA    dc.w    0
  1343.     dc.w    0
  1344. lbW000CEE    dc.w    0
  1345.     dc.w    0
  1346.  
  1347. ActualVoicex4                ; valeur de ActualVoice * 4
  1348.     dc.w    0            ; 0,4,8,12
  1349. ActualVoicex2                ; valeur de ActualVoice * 2
  1350.     dc.w    0            ; 0,2,4,6
  1351.  
  1352. lbL000CFA    dc.l    0
  1353.     dc.l    0
  1354.     dc.l    0
  1355.     dc.l    0
  1356.     dc.l    0
  1357.     dc.l    0
  1358.     dc.l    0
  1359.     dc.l    0
  1360.     dc.l    0
  1361.     dc.l    0
  1362.  
  1363.  
  1364. SamplesAdr                ; 19 adresses
  1365.     dc.l    $50f1a
  1366.     dc.l    $50f1c
  1367.     dc.l    $522b1
  1368.     dc.l    $52a1e
  1369.     dc.l    $543fe
  1370.     dc.l    $55025
  1371.     dc.l    $566a3
  1372.     dc.l    $57e75
  1373.     dc.l    $597c5
  1374.     dc.l    $5b113
  1375.     dc.l    $5d6f7
  1376.     dc.l    $5e59e
  1377.     dc.l    $5fb02
  1378.     dc.l    $60728
  1379.     dc.l    $613aa
  1380.     dc.l    $61b7a
  1381.     dc.l    $6273c
  1382.     dc.l    $6273c
  1383.     dc.l    $6273c
  1384.  
  1385.  
  1386. lbL000D6E                ; $4fd98
  1387.     dc.l    EmptySample
  1388.     dc.l    0,0            ; $4fd9c
  1389.  
  1390.  
  1391. SamplesInfos
  1392.     ; .B SmplNbr (dans SamplesAdr)
  1393.     ; .B Repeat ON/OFF (0=OFF)
  1394.     ; .W Len
  1395.     ; .W .W RepStart RepLen
  1396.     dc.w    $000,$0002,$0000,$0002
  1397.     dc.w    $101,$1394,$08EC,$0AA8
  1398.     dc.w    $200,$076C,$0000,$0002
  1399.     dc.w    $300,$19E0,$0000,$0002
  1400.     dc.w    $400,$0C26,$0000,$0002
  1401.     dc.w    $501,$167E,$08CC,$072E
  1402.     dc.w    $601,$17D2,$06F2,$091E
  1403.     dc.w    $701,$1950,$03CC,$0CD0
  1404.     dc.w    $801,$194E,$05BA,$0A62
  1405.     dc.w    $901,$25E4,$116E,$103C
  1406.     dc.w    $A00,$0EA6,$0000,$0002
  1407.     dc.w    $B01,$1564,$1446,$011E
  1408.     dc.w    $C00,$0C26,$0000,$0002
  1409.     dc.w    $D00,$0C82,$0000,$0002
  1410.     dc.w    $E00,$07D0,$0000,$0002
  1411.     dc.w    $F00,$0BC2,$0000,$0002
  1412.     dc.w    $C01,$0C26,$00C8,$0B54
  1413.  
  1414.  
  1415. lbL000E02
  1416.     dc.b    3,4,5,7,8,9,$A,$C
  1417.  
  1418.  
  1419.  
  1420. PatternsAdr                ; 131 adresses
  1421. SongPatterns                ; $4fe34, 7 subsongs
  1422.     dc.l    $500B5,$50087,$5009E,$50070
  1423.     dc.l    $500CC,$500D6,$500D9,$500E0
  1424.     dc.l    $500EE,$500E6,$500E9,$500E3
  1425.     dc.l    $5012B,$5012E,$50131,$50134
  1426.     dc.l    $5011F,$50107,$50113,$50104
  1427.     dc.l    $500F5,$500F8,$500FB,$500FE
  1428.     dc.l    $50152,$5013E,$50148,$5013B
  1429.  
  1430.  
  1431. lbL000E7A                ; $4fea4
  1432.     dc.l    $5015C,$501BD,$50202,$5020B,$50219,$50222,$50267,$50276
  1433.     dc.l    $50287,$502CC,$502D5,$502F6,$50306,$5031F,$50364,$5036D
  1434.     dc.l    $50384,$503C9,$503D0,$503E4,$50429,$50432,$50441,$50486
  1435.     dc.l    $5048F,$504B9,$504D6,$504F7,$50504,$50549,$5055C,$50586
  1436.     dc.l    $5059B,$505E0,$5061E,$50659,$506A1,$506E6,$506EF,$50710
  1437.     dc.l    $50755,$50764,$50786,$507E6,$507ED,$50812,$5081F,$5082E
  1438.     dc.l    $50853,$50859,$50865,$5088A,$508A4,$508C7,$508E7,$5090D
  1439.     dc.l    $5092C,$50933,$50952,$50961,$50986,$509B3,$509C1,$509E6
  1440.     dc.l    $50A13,$50A1B,$50A1F,$50A4F,$50A94,$50AD7,$50ADB,$50AF3
  1441.     dc.l    $50B34,$50B38,$50B3C,$50B71,$50B7C,$50B91,$50BD1,$50BF5
  1442.     dc.l    $50C0E,$50C1F,$50C4B,$50C77,$50CE1,$50D06,$50D16,$50D3B
  1443.     dc.l    $50DA5,$50DB3,$50DD2,$50DE0,$50DFB,$50E04,$50E28,$50E4D
  1444.     dc.l    $50E59,$50E7E,$50E8F,$50EB4,$50EC2,$50EE7,$50EF5
  1445.  
  1446.  
  1447.  
  1448. lbL001016                ; $50040
  1449.     dc.l    0
  1450.     dc.l    0
  1451.     dc.l    $40400000
  1452.     dc.l    $4000000
  1453.     dc.l    $34340001
  1454.     dc.l    $2320000
  1455.     dc.l    $36360001
  1456.     dc.l    $2320000
  1457.     dc.l    $3E3E0001
  1458.     dc.l    $2000000
  1459.     dc.l    $38380000
  1460.     dc.l    $4000000
  1461.  
  1462.  
  1463. PatternsBuf                ; $50070, 3754 octets
  1464.     incbin    b:HammerFist/HammerFist.pat
  1465.  
  1466.  
  1467.  
  1468. ;-----------------------------------------------------------------------
  1469. ; Données en CHIP
  1470.  
  1471.  
  1472.     section Samples,data_c
  1473.  
  1474.  
  1475. EmptySample                ; $4fd9c
  1476.     dc.l    0,0
  1477.  
  1478. SamplesBuf                ; $50f1a, 71714 octets
  1479.     incbin    b:HammerFist/HammerFist.smp
  1480.  
  1481. ;-----------------------------------------------------------------------
  1482. ; END
  1483.     end
  1484.  
  1485.